热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

尾花|花萼_相关性Correlations皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)相关的知识,希望对你有一定的参考价值。 相关

篇首语:本文由编程笔记#小编为大家整理,主要介绍了相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)相关的知识,希望对你有一定的参考价值。



相关性Correlations
  • Correlations,相关度量,目前Spark支持两种相关性系数:皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)。相关系数是用以反映变量之间相关关系密切程度的统计指标。简单的来说就是相关系数绝对值越大(值越接近1或者-1), 当取值为0表示不相关,取值为(0~-1]表示负相关,取值为(0, 1]表示正相关。

  • Pearson相关系数表达的是两个数值变量的线性相关性, 它一般适用于正态分布。其取值范围是[-1, 1], 当取值为0表示不相关, 取值为[-1~0)表示负相关,取值为(0, 1]表示正相关。

公式


  • Spearman相关系数也用来表达两个变量的相关性,但是它没有Pearson相关系数对变量的分布要求那么严格, 另外Spearman相关系数可以更好地用于测度变量的排序关系。其计算公式为:

公式


  1. 根据输入类型的不同,输出的结果也产生相应的变化。如果输入的是两个RDD[Double],则输出的是一个double类型的结果;
    如果输入的是一个RDD[Vector],则对应的输出的是一个相关系数矩阵。具体操作如下所示:

  2. 接下来我们先从数据集中获取两个series,这两个series要求必须数量相同,这里我们取莺尾花的前两个属性:

  3. 然后,我们调用Statistics包中的corr()函数来获取相关性,这里用的是"pearson" 皮尔逊,当然根据不同需要也可以选择"spearman" 斯皮尔曼等级:

  4. 上面介绍了求两个series的相关性,接下来介绍一下如何求 [相关系数矩阵]。
    方法是类似的,首先还是先从数据集中获取一个RDD[Vector],为了进行对照,我们同样选择前两个属性:

  5. 我们调用Statistics包中的corr()函数,这里也同样可以选择"pearson"或者"spearman",得到相关系数矩阵:默认使用 皮尔逊

package basicstatistics
import org.apache.log4j.Level, Logger
import org.apache.spark.SparkContext
import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.Matrix, Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.rdd.RDD
/**
*
* 相关性Correlations
*
* Correlations,相关度量,目前Spark支持两种相关性系数:皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)。
* 相关系数是用以反映变量之间相关关系密切程度的统计指标。简单的来说就是相关系数绝对值越大(值越接近1或者-1),
* 当取值为0表示不相关,取值为(0~-1]表示负相关,取值为(0, 1]表示正相关。
* Pearson相关系数表达的是两个数值变量的线性相关性, 它一般适用于正态分布。其取值范围是[-1, 1], 当取值为0表示不相关,
* 取值为[-1~0)表示负相关,取值为(0, 1]表示正相关。
*
* 公式 http://mocom.xmu.edu.cn/blog/58482eb8e083c990247075aa.png
*
* Spearman相关系数也用来表达两个变量的相关性,但是它没有Pearson相关系数对变量的分布要求那么严格,
* 另外Spearman相关系数可以更好地用于测度变量的排序关系。其计算公式为:
*
* 公式 http://mocom.xmu.edu.cn/blog/58482eb3e083c990247075a9.png
*/

object CorrelationsDemo
def main(args: Array[String]): Unit =
Logger.getLogger("org").setLevel(Level.ERROR)
val sc = new SparkContext("local[*]", "")
/**
* 根据输入类型的不同,输出的结果也产生相应的变化。如果输入的是两个RDD[Double],则输出的是一个double类型的结果;
* 如果输入的是一个RDD[Vector],则对应的输出的是一个相关系数矩阵。具体操作如下所示:
*/

// 接下来我们先从数据集中获取两个series,这两个series要求必须数量相同,这里我们取莺尾花的前两个属性:
val seriesX: RDD[Double] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
.map(_.split(",")).map(p => p(0).toDouble)
val seriesY: RDD[Double] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
.map(_.split(",")).map(p => p(1).toDouble)
// 然后,我们调用Statistics包中的corr()函数来获取相关性,这里用的是"pearson" 皮尔逊,当然根据不同需要也可以选择"spearman" 斯皮尔曼等级:
val seriesCorrelation: Double = Statistics.corr(seriesX, seriesY, "pearson")
println(seriesCorrelation+" double")
//-0.1594565184858299 spearman
//-0.10936924995064387 pearson 说明数据集的前两列,即花萼长度和花萼宽度具有微小的 负相关性 。
// 上面介绍了求两个series的相关性,接下来介绍一下如何求 [相关系数矩阵]。
// 方法是类似的,首先还是先从数据集中获取一个RDD[Vector],为了进行对照,我们同样选择前两个属性:
val data: RDD[linalg.Vector] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
.map(_.split(",")).map(p => Vectors.dense(p(0).toDouble, p(1).toDouble))
//我们调用Statistics包中的corr()函数,这里也同样可以选择"pearson"或者"spearman",得到相关系数矩阵:
//默认使用 皮尔逊
val dataCorrelation: Matrix = Statistics.corr(data)
println(dataCorrelation+"矩阵")















阅读世界,共赴山海


423全民读书节,邀你共读


推荐阅读
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文详细介绍了如何配置Apache Flume与Spark Streaming,实现高效的数据传输。文中提供了两种集成方案,旨在帮助用户根据具体需求选择最合适的配置方法。 ... [详细]
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • 本文详细介绍了Java集合框架中的Collection体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
  • QNX 微内核(procnto-instr)的监测版本内置了高级跟踪与分析工具,能够实现实时系统监控。该模块适用于单处理器及多处理器系统。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • Go语言开发中的常见陷阱与解决方案
    本文探讨了在使用Go语言开发过程中遇到的一些典型问题,包括Map遍历的不确定性、切片操作的潜在风险以及并发处理时的常见错误。通过具体案例分析,提供有效的解决策略。 ... [详细]
  • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
    本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
author-avatar
我爱看电视OK
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有